const events = {};

export default {
  /**
   * 订阅事件
   * @param eventName 事件名称
   * @param fn        回调函数
   */
  subscribe: (eventName, fn) => {
    events[eventName] = events[eventName] || [];
    events[eventName].push(fn);
  },

  /**
   * 取消订阅事件
   * @param eventName 事件名称
   * @param fn        回调函数
   */
  unsubscribe: (eventName, fn) => {
    if (events[eventName]) {
      for (let [key, value] of events[eventName].entries()) {
        if (value === fn) {
          events[eventName].splice(key, 1);
          break;
        }
      }
    }
  },

  /**
   * 发送事件
   * @param eventName 事件名称
   * @param data      事件参数
   */
  emit: (eventName, data) => {
    if (events[eventName]) {
      events[eventName].forEach(fn => {
        fn(data);
      });
    }
  }
};
